常微分方程算法之梯形法(隐式Eluer法)

您所在的位置:网站首页 用经典r k法求初值问题 常微分方程算法之梯形法(隐式Eluer法)

常微分方程算法之梯形法(隐式Eluer法)

2024-05-29 23:40| 来源: 网络整理| 查看: 265

目录

一、研究对象

二、梯形法原理

三、算例

一、研究对象

        主要研究对象:一阶常微分方程的初值问题,与欧拉法相同。

\left\{\begin{matrix} \frac{dy}{dx}=f(x,y),& ax\leqslant b, \\y(a)=\alpha & \end{matrix}\right. \space \space \space \space \space \space \left ( 1 \right )

        通过数值解法来近似获得其数值解,并利用计算机编程实现计算过程。

二、梯形法原理

        对公式(1)两端从x_{i}x_{i+1}积分,可得:

y(x_{i+1})-y(x_{i})=\int_{x_{i}}^{x_{i+1}}f(x,y(x))dx \space\space\space\space (2)

        对于欧拉法而言,是采用左矩形公式进行逼近,即:

\int_{x_{i}}^{x_{i+1}}f(x,y(x))dx\approx f(x_{i},y(x_{i}))h

其中,用y_{i}作为y(x_{i})的近似值,得到的便是欧拉法的差分格式:y_{i+1}-y_{i}=hf(x_{i},y_{i})

        如果采用右矩形公式进行逼近,可得类似的差分格式:y_{i+1}-y_{i}=hf(x_{i+1},y_{i+1})

采用梯形公式计算(2)右端积分,可得:

\int_{x_{i}}^{x_{i+1}}f(x,y(x))dx \approx \frac{1}{2}h[f(x_{i},y(x_{i})+f(x_{i+1},y_(x_{i+1})]

        用y_{i}作为y(x_{i})的近似值,可得梯形法的差分格式:

y_{i+1}=y_{i}+\frac{1}{2}h[f(x_{i},y_{i})+f(x_{i+1},y_{i+1})]

        梯形法属于隐式格式,需要通过迭代的方式来求解,迭代初值由欧拉法给出。于是:

\left\{\begin{matrix} y_{i+1}^{(0)}=y_{i}+hf(x_{i},y_{i})& \space\space i=0,1,2,\cdot \cdot \cdot ,m-1, k=0,1,2,\cdot \cdot \cdot \\ y_{i+1}^{(k+1)}=y_{i}+\frac{1}{2}h[f(x_{i},y_{i})+f(x_{i+1},y_{i+1}^{(k)})]& \end{matrix}\right.

三、算例

        求初值问题

\left\{\begin{matrix} y^{'} =-\frac{0.9}{1+2x}y &, 0x\leqslant 0.1 \\ y(0)=1, & \end{matrix}\right.

步长h=0.02,迭代误差限制为\varepsilon = 10^{-6}。已知精确解为:y(x)=(1+2x)^{-0.45}

代码如下:

#include #include #include int main(int argc, char* argv[]) { int i,N,k; double a,b,h,y0,err,ytemp1,ytemp2,epsilon; double *x,*y; double f(double x, double y); double yexact(double x); a=0.0; b=0.1; N=5; h=(b-a)/N; x=(double*)malloc(sizeof(double)*(N+1)); y=(double*)malloc(sizeof(double)*(N+1)); for(i=0;i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3